제 해결 (TI C2000) 

문제 : 매뉴얼에서 지정한 SCI-A의 GPIO 포트를 사용할 수 없을 때

C2000은 SCI-A의 지정된 GPIO 포트에서만 램부팅을 지원합니다. 따라서 easyDSP를 사용하여 램부팅 또는 플래시 프로그래밍을 하기 위해서는 해당 GPIO포트의 SCIA에 easyDSP가 연결되어야 합니다.
만약 easyDSP로 변수 모니터링만 수행한다면 다른 어떠한 SCI, GPIO 포트에 연결될 수 있습니다. 단, easyDSP가 제공하는 소스파일을 해당 SCI, GPIO 포트에 맞게 수정해야 합니다.
easyDSP로 램부팅 또는 플래시 프로그래밍을 수행하면서, 지정된 GPIO포트를 사용하지 않는 방법은 도움말 "MCU별 사용법>C2000>SCI-A가 아닌 포트 사용" 을 참조하시기 바랍니다.
MCU 리셋 초기에 easyDSP를 지정된 GPIO포트에 연결했다가, 램부팅 및 플래시 프로그래밍을 완료한 후, 사용자 프로그램이 수행되면, easyDSP를 다른 GPIO 포트에 연결하는 방식입니다.

문제 : 플래시 대화상자 진입시 The address xxx is not flash area ! 에러 메시지



원인 : 램 영역에 initialized section이 위치하여 플래시 프로그래밍이 불가능함. 특히 CLA 프로그래밍시 램에 위치한 사용자 변수의 초기값이 설정되는 경우
해결 : 하기 매뉴얼 캡처 참조. 사용자 변수의 초기값 설정이 필요한 경우, 이를 main() 초기 부분에 변수 라이팅함으로써 해결


문제 : 램부팅은 성공하나 0번지부터 읽기 실패로 베리파이 실패



verify 작업은 easyDSP와 MCU간 통신에 의해 진행됩니다. 따라서 통신을 방해하는 모든 요소가 원인이 될 수 있습니다.

원인1 : easyDSP 제공 통신용 소스파일이 프로젝트에 포함되지 않음.
해결1 : 도움말을 참조하여 easyDSP 제공 통신용 소스파일을 프로젝트에 포함하고 적절한 설정 

원인2 : 사용자 프로그램에서 easyDSP가 사용하는 GPIO에 대해 설정
해결2 : 해당 설정 제거

원인3 : easyDSP 통신을 위한 적절한 리소스가 할당되지 못함.
해결3 : 만약 ePWM 인터럽트 주파수가 매우 높다면 이를 적절히 낮춰 easyDSP 통신 인터럽트에 충분한 시간을 할당함.

문제 : 변수 개수를 증가시키거나 매우 큰 사이즈의 배열을 설정할 때 MCU가 정상동작하지 않음

원인 : 이전 버전의 TI 소스파일의 버그
해결 : 최신 버전의 TI 소스파일 (C2000Ware) 사용
   

문제 : F2838x가 동작하지 않음

원인 : C2000Ware_3_02_00_00 버전부터 TI 제공 소스파일의 기본 클럭주파수가 20MHz에서 25MHz로 변경되었는데 실제 보드에서는 클럭 주파수 20MHz 사용중.
해결 : USE_20MHZ_XTAL를 predefine 하여 비트필드라면 f2838x_sysctrl.c 파일내에서, DriverLib라면 device.h파일에서 클럭 주파수가 제대로 설정되도록 조치 바랍니다. 하기 TI 문서 (C2000Ware_3_02_00_00 release note) 참조하세요.
 

문제 : 램 부팅 초기에 하기의 경고 메시지 출현

해결 : 램 부팅시 부트 롬 프로그램이 사용하는 램 영역이 사용자에 의해 사용되지 말아야 하는 데, 사용자 프로그램이 이 영역을 사용하는 것에 대해서 경고를 띄우는 것입니다.
예를 들어, 하기 메시지는 28377 사용시 사용자 프로그램이 0x2 - 0x122 사이에 존재하기 때문에 발생된 경고입니다.


TI의 Technical Reference Manual (Literature Number: SPRUHM8I, Revised September 2019)에 해당 영역은 사용자가 사용하지 말아야 할 영역으로 나와 있습니다.

사용하시는 커맨드 파일을 적절히 수정하셔서 본 영역이 사용되지 않도록 수정하여 주십시오.

문제 : 하기 메시지로 램 부팅이 실패한다

해결 : 링크파일에서 프로그램을 플래시 영역에 할당했기 때문에 램 부팅이 안되는 것입니다. 메시지의 메모리 주소는 플래시 영역입니다. 따라서 링크파일을 변경하여 모든 메모리 영역을 램에 할당한 후 램 부팅을 시도하십시요.

문제 : Auto Bauding 실패

해결 : 이 문제는 대부분 잘못된 하드웨어 연결(easyDSP pod와 MCU 보드간)에 의한 것입니다.
스텝 1 : 도움말을 기반으로 현재 연결이 올바른 지 다시 한번 확인해 주십시요. 만약 오류가 발견되지 않는 다면 스텝2로 넘어갑니다.
스텝 2 : 아래 그림을 참조하여 부팅시 easyDSP핀의 실제 파형을 관찰하여 주십시요. easyDSP의 /RESET 신호가 MCU에 직결되지 않을 경우에는 (예를 들어, 전원 감시 IC가 그 중간에 위치할 경우), DSP의 리셋 신호도 같이 관찰하여 주십시오.
          확인 1 : easyDSP의
/BOOT신호가 HIGH가 되기 전에, MCU 리셋 입력 신호(XRS)가 HIGH로 되어야 함.
                    easyDSP /RESET 신호가 DSP에 직결된 경우에는 하기 그림처럼 이 조건이 보장됨.
                    직결되지 않고 중간에 전원 감시 IC가 있을 경우에는 전원 감시 IC의 동작 조건에 따라 이 조건이 만족되지 않을 수 있음.

          확인 2 : 0x41의 RX가 나온 뒤 일정시간 뒤 동일값의 TX가 나옴

/BOOT핀이 HIGH로 올라간 이후 50msec 이후에 RX를 통해 easyDSP로부터 MCU에게 0x41이 전달됩니다. 보딩bps는 DSP종류, SCI 부팅 속도 설정에 따라 다를 수 있습니다. 전달된 0x41을 기반으로 MCU는 bps를 파악하여, TX를 통해 파악된 bps로 다시 easyDSP에 보내줍니다. 이러한 작업을 통해, 상호간에 bps를 공유하는 auto bauding이 완료되는 것입니다.

 

문제 : 플래시롬 대화상자에서 하기 에러 메시지 발생

해결 : easyDSP는 TI에서 제공한 flashAPI를 통해 플래시롬을 억세스합니다. Gen3 MCU (ex : F2807x, F28002x, F28004x, F2837x, F2738x)의 flashAPI는 MCU 종류에 따라 섹션이 최소 64비트 (4 워드 또는 8바이트) 또는 권장 128바이트에 얼라인되도록 요구하고 있습니다. 즉, C2000 코어의 경우 섹션 시작 주소의 최하위 번지가 0x0, 0x4, 0x8, 0xC 로 마감되어야 하며, Arm Cortex-M4 (ex, F2838x CM)의 경우, 0x0, 0x8로 마감되어야 합니다. 상기 그림에서는 0x2로 마감되어 에러가 발생하였습니다. 해결 방법은 cmd 파일에서 플래시에 저장되는 섹션에 대해서 ALIGN()를 붙이는 것입니다. 아래 TI에서 제공하는 링커 커맨드 파일에 대표적인 섹션에 대해 이미 적용되어 있음을 알 수 있습니다. 사용자가 섹션을 새로 생성할 경우에도 ALIGN(*)이 적용될 수 있도록 주의 부탁드립니다. 

<TMS320F280049 경우>


<TMS320F28388 CPU1/CPU2 경우>

<TMS320F28388 CM 경우>

문제 : CCS상에서 빌드를 하고 나면 아래와 같은 에러가 발생

 undefined first referenced                                                       
  symbol       in file                                                            
 --------- ---------------- 
 LL$$OR    C:\\tidcs\\c28\\DSP2833x\\Project\\Debug\\easy2833x_sci_v7.3.obj
 ULL$$CMP  C:\\tidcs\\c28\\DSP2833x\\Project\\Debug\\easy2833x_sci_v7.3.obj

error: unresolved symbols remain
error: errors encountered during linking; "./Debug/inverter.out" not built

>> Compilation failure

해결 : MCU는 일부 연산을 런타임라이브러리를 통해 지원합니다. 상기 에러에서
"ULL$$CMP" = unsigned long long comparison
"LL$$OR" = long long oring
을 각각 의미합니다. 컴파일시 런타임라이브러리를 포함 하십시오.

문제 : 모든 변수 형식이 'int'로 표기

원인 : 프로젝트 설정에서 debugging model을 잘 못 지정한 경우입니다 (dwarf 형식으로 컴파일된 out파일을 coff 형식으로 지정)
해결 : 최신 easyDSP 프로그램을 사용하시고 프로젝트 설정에서 debugging model을 올바르게 설정